/**
 * @param {number} target
 * @param {number[]} nums
 * @return {number}
 */
var minSubArrayLen = function (target, nums) {
  let minLen = Infinity; // 初始化最小长度为无穷大
  let left = 0; // 滑动窗口左边界
  let sum = 0; // 当前窗口的和

  for (let right = 0; right < nums.length; right++) {
    // 扩大窗口，累加元素和
    sum += nums[right];

    // 当窗口和大于等于target时，尝试缩小窗口
    while (sum >= target) {
      // 更新最小长度
      minLen = Math.min(minLen, right - left + 1);
      // 缩小窗口，移除左边界元素
      sum -= nums[left];
      left++;
    }
  }

  // 如果没有找到符合条件的子数组，返回0
  return minLen === Infinity ? 0 : minLen;
};